<?php

namespace App\Repositories;


abstract class EloquentRepository
{
	/**
	 * 暂时放这里,这个变量用来跟踪用户申请成为律师的流程
	 */
	const STATUS_USER = 1;                  // 普通用户
	const STATUS_BECOMING_LAWYER = 2;       // 用户提交了成为律师的申请
	const STATUS_VERIFIED_LAWYER = 3;       // 用户称为了经过审查的律师
	const USER_GROUP_USER = 1;
	const USER_GROUP_LAWYER = 2;
	const STATUS_COMPLETE = 'complete';       // 咨询完成，用户已经评价
	const FOLLOWED = 1;
	const FOLLOWCANLE = 0;

	const TYPE_POST = 1;
	const TYPE_COMMENT = 2;
	const TYPE_USER = 3;
	const TYPE_ARTICLE = 4;


	// 流转方向(direction)
	const DIRECTION_OUT = 'out';	// 转出
	const DIRECTION_IN = 'in';		// 转入

	// 流转状态(status)
	const STATUS_SUCCESS = 'success';	// 成功
	const STATUS_FAIL = 'fail';			// 失败
	const STATUS_WAIT = 'wait';			// 等待

	// 交易类型(type)
	const TYPE_REWARD = 'reward';			// 送心意
	const TYPE_QUESTION = 'question';		// 咨询
	const TYPE_PAY_TEXT = 'pay_text';		// 付费图文咨询
	const TYPE_PAY_PHONE = 'pay_phone';		// 付费电话咨询
	const TYPE_PAY_COMPANY = 'pay_company';	// 付费法律顾问
	const TYPE_RECHARGE = 'recharge';		// 充值
	const TYPE_WITHDRAW = 'withdraw';		// 提现

	//Call_log
	const CALL_RESULT_FAIL 	  = 2;			//通话失败
	const CALL_RESULT_SUCCESS = 1;			//通话成功
	/**
	 * @var model 注入的EloquentModel
	 */
	protected $model;

	/**
	 * 根据ID查询资料
	 * @param $id
	 * @param array $columns
	 * @return mixed
	 */
	public function find($id, $columns = ['*'])
	{
		return $this->model->find($id, $columns);
	}

	/**
	 * 根据指定字段查询资料
	 * @param $attribute
	 * @param $value
	 * @param array $columns
	 * @return mixed
	 */
	public function findBy($attribute, $value, $columns = ['*'])
	{
		return $this->model->where($attribute, '=', $value)->first($columns);
	}

	/**
	 * 查询所有资料
	 * @param array $columns
	 * @return mixed
	 */
	public function all($columns = ['*'])
	{
		return $this->model->all($columns);
	}

	/**
	 * 查询分页资料
	 * @param int $size
	 * @param array $columns
	 * @return mixed
	 */
	public function paginate($size = 15, $columns = ['*'])
	{
		return $this->model->paginate($size, $columns);
	}

	/**
	 * 新增资料
	 * @param array $data
	 * @return mixed
	 */
	public function create(array $data)
	{
		return $this->model->create($data);
	}

	/**
	 * 修改资料
	 * @param array $data
	 * @param $id
	 * @param string $attribute
	 * @return mixed
	 */
	public function update(array $data, $id, $attribute = 'id')
	{
		return $this->model->where($attribute, '=', $id)->update($data);
	}

	/**
	 * 删除指定ID资料
	 * @param $id
	 * @return mixed
	 */
	public function delete($id)
	{
		return $this->model->destory($id);
	}
}